﻿//using System;
//using System.Web;
//using System.Web.Mvc;
//using System.Linq;
//using StackExchange.Profiling;
//using StackExchange.Profiling.MVCHelpers;
////using Microsoft.Web.Infrastructure;
//using Microsoft.Web.Infrastructure.DynamicModuleHelper;
//using System.Configuration;

////using System.Data;
////using System.Data.Entity;
////using System.Data.Entity.Infrastructure;
////using StackExchange.Profiling.Data.EntityFramework;
////using StackExchange.Profiling.Data.Linq2Sql;

///*[assembly: WebActivator.PreApplicationStartMethod(
//    typeof(MVCBootstrap.WebUI.App_Start.MiniProfilerPackage), "PreStart")]

//[assembly: WebActivator.PostApplicationStartMethod(
//    typeof(MVCBootstrap.WebUI.App_Start.MiniProfilerPackage), "PostStart")]
//*/
//[assembly: System.Web.PreApplicationStartMethod(typeof(MVCBootstrap.WebUI.App_Start.MiniProfilerPackage), "PreStart")]

//namespace MVCBootstrap.WebUI.App_Start {
//    public static class MiniProfilerPackage {
//        public static void PreStart() {
//            if (ConfigurationManager.AppSettings["MiniProfiler"] != "true") {
//                return;
//            }
//            // Be sure to restart you ASP.NET Developement server, this code will not run until you do that. 

//            //TODO: See - _MINIPROFILER UPDATED Layout.cshtml
//            //      For profiling to display in the UI you will have to include the line @StackExchange.Profiling.MiniProfiler.RenderIncludes() 
//            //      in your master layout

//            //TODO: Non SQL Server based installs can use other formatters like: new StackExchange.Profiling.SqlFormatters.InlineFormatter()
//            //MiniProfiler.Settings.SqlFormatter = new StackExchange.Profiling.SqlFormatters.SqlServerFormatter();

//            //TODO: To profile a standard DbConnection: 
//            // var profiled = new ProfiledDbConnection(cnn, MiniProfiler.Current);

//            //TODO: If you are profiling EF code first try: 
//            MiniProfilerEF.Initialize(false);

//            //Make sure the MiniProfiler handles BeginRequest and EndRequest
//            DynamicModuleUtility.RegisterModule(typeof(MiniProfilerStartupModule));

//            //Setup profiler for Controllers via a Global ActionFilter
//            GlobalFilters.Filters.Add(new ProfilingActionFilter());

//            // You can use this to check if a request is allowed to view results
//            //MiniProfiler.Settings.Results_Authorize = (request) =>
//            //{
//            // you should implement this if you need to restrict visibility of profiling on a per request basis 
//            //    return !DisableProfilingResults; 
//            //};

//            // the list of all sessions in the store is restricted by default, you must return true to alllow it
//            //MiniProfiler.Settings.Results_List_Authorize = (request) =>
//            //{
//            // you may implement this if you need to restrict visibility of profiling lists on a per request basis 
//            //return true; // all requests are kosher
//            //};
//            /*	}

//                public static void PostStart() {*/
//            // Intercept ViewEngines to profile all partial views and regular views.
//            // If you prefer to insert your profiling blocks manually you can comment this out
//            var copy = ViewEngines.Engines.ToList();
//            ViewEngines.Engines.Clear();
//            foreach (var item in copy) {
//                ViewEngines.Engines.Add(new ProfilingViewEngine(item));
//            }
//        }
//    }

//    public class MiniProfilerStartupModule : IHttpModule {
//        public void Init(HttpApplication context) {
//            context.BeginRequest += (sender, e) => {
//                var request = ((HttpApplication)sender).Request;
//                //TODO: By default only local requests are profiled, optionally you can set it up
//                //  so authenticated users are always profiled
//                if (request.IsLocal) {
//                    MiniProfiler.Start();
//                }
//            };


//            // TODO: You can control who sees the profiling information
//            /*
//            context.AuthenticateRequest += (sender, e) =>
//            {
//                if (!CurrentUserIsAllowedToSeeProfiler())
//                {
//                    StackExchange.Profiling.MiniProfiler.Stop(discardResults: true);
//                }
//            };
//            */

//            context.EndRequest += (sender, e) => {
//                MiniProfiler.Stop();
//            };
//        }

//        public void Dispose() { }
//    }
//}

